Ostatnio uruchomiłem część mojego kodu JavaScript przez JSLint Crockforda i dało to następujący błąd: Problem w wierszu 1, znak 1: brak instrukcji „użyj ścisłego”. Szukając czegoś, zdałem sobie sprawę, że niektórzy dodają „użyj ścisłego”; do ich kodu JavaScript. Po dodaniu oświadczenia błąd przestał się pojawiać. Niestety, Google nie ujawnił zbyt wiele historii stojącej za tym oświadczeniem. Z pewnością musi to mieć coś wspólnego ze sposobem interpretacji JavaScript przez przeglądarkę, ale nie mam pojęcia, jaki byłby tego efekt. Więc co to jest „użyj ścisłego”; wszystko o tym, co to oznacza i czy nadal jest aktualne? Czy którakolwiek z obecnych przeglądarek odpowiada na „użyj ścisłego”; string czy jest do wykorzystania w przyszłości?
2020-12-07 22:08:59
Ten artykuł o trybie ścisłym JavaScript może Cię zainteresować: John Resig - Tryb ścisły ECMAScript 5, JSON i nie tylko Cytując kilka interesujących części: Tryb ścisły to nowa funkcja w ECMAScript 5, która umożliwia umieszczenie programu lub funkcji w „ścisłym” kontekście operacyjnym. Ten ścisły kontekst zapobiega podejmowaniu pewnych działań i generuje więcej wyjątków. I: Tryb ścisły pomaga na kilka sposobów: Wyłapuje kilka typowych błędów w kodowaniu, rzucając wyjątki. Zapobiega lub generuje błędy, gdy podejmowane są stosunkowo „niebezpieczne” działania (takie jak uzyskanie dostępu do obiektu globalnego). Wyłącza funkcje, które są mylące lub źle przemyślane. Zauważ również, że możesz zastosować „tryb ścisły” do całego pliku ... Lub możesz go użyć tylko do określonej funkcji (nadal cytując artykuł Johna Resiga): // Niestandardowy kod ... (funkcjonować(){ "użyj ścisłego"; // Zdefiniuj ściśle swoją bibliotekę ... }) (); // Niestandardowy kod ... Co może być pomocne, jeśli musisz mieszać stary i nowy kod ;-) Przypuszczam więc, że jest to trochę jak „użyj ścisłego”, którego można używać w Perlu (stąd nazwa?): Pomaga popełnić mniej błędów, wykrywając więcej rzeczy, które mogą prowadzić do awarii. Tryb ścisły jest teraz obsługiwany przez wszystkie główne przeglądarki. Wewnątrz natywnych modułów ECMAScript (z instrukcjami importu i eksportu) oraz klas ES6, tryb ścisły jest zawsze włączony i nie można go wyłączyć. | Jest to nowa funkcja ECMAScript 5. John Resig napisał ładne podsumowanie. To po prostu ciąg znaków, który umieszczasz w swoich plikach JavaScript (na górze pliku lub wewnątrz funkcji), który wygląda następująco: "użyj ścisłego"; Umieszczenie go teraz w kodzie nie powinno powodować żadnych problemów z obecnymi przeglądarkami, ponieważ jest to tylko ciąg. Może to spowodować problemy z kodem w przyszłości, jeśli kod narusza pragmę. Na przykład, jeśli aktualnie masz foo = "bar" bez wcześniej zdefiniowania foo, twój kod zacznie kończyć się niepowodzeniem ... co moim zdaniem jest dobrą rzeczą. | Oświadczenie „użyj ścisłego”; instruuje przeglądarkę, aby używała trybu ścisłego, który jest zredukowanym i bezpieczniejszym zestawem funkcji JavaScript. Lista funkcji (niepełna) Nie zezwala na zmienne globalne. (Łapie brakujące deklaracje var i literówki w nazwach zmiennych) Ciche przypisania zakończone niepowodzeniem spowodują wyświetlenie błędu w trybie ścisłym (przypisanie NaN = 5;) Próby usunięcia niemożliwych do usunięcia właściwości spowodują (usuń Object.prototype) Wymaga, aby wszystkie nazwy właściwości w literale obiektu były unikalne (var x = {x1: "1", x1: "2"}) Nazwy parametrów funkcji muszą być unikalne (suma funkcji (x, x) {...}) Zabrania składni ósemkowej (var x = 023; niektórzy deweloperzy błędnie zakładają, że poprzedzające zero nie zmienia liczby). Zabrania słowa kluczowego with eval w trybie ścisłym nie wprowadza nowych zmiennych Zabrania usuwania zwykłych nazw (usuń x;) Zabrania wiązania lub przypisywania nazw eval i argumentów w jakiejkolwiek formie Tryb ścisły nie aliasuje właściwości obiektu arguments z parametrami formalnymi. (tj. w funkcji sum (a, b) {return arguments [0] + b;} Działa to, ponieważ argumenty [0] są powiązane z a i tak dalej.) arguments.callee nie jest obsługiwany [Ref: tryb ścisły, Mozilla Developer Network] | Jeśli ludzie obawiają się używania ścisłego, warto zapoznać się z tym artykułem: Obsługa trybu ścisłego ECMAScript 5 w przeglądarkach. Co to oznacza? NovoGeek.com - blog Krishny Mówi o obsłudze przeglądarek, ale co ważniejsze, jak bezpiecznie sobie z tym radzić: function isStrictMode () { powrócić! to; } / * zwraca false, ponieważ „this” odnosi się do obiektu globalnego i „! this” staje się fałszywe * / function isStrictMode () { "użyj ścisłego"; powrócić! to; } / * zwraca prawdę, ponieważ w trybie ścisłym słowo kluczowe „this” nie odnosi się do obiektu globalnego, w przeciwieństwie do tradycyjnego JS. Więc tutaj „to” jest „nieokreślone”, a „! To” staje się prawdą. * / | Słowo ostrzeżenia, wszyscy ciężko obciążeni programiści: stosowanie „ścisłego” do istniejącego kodu może być niebezpieczne! To nie jest jakaś dobra naklejka z radosną buźką, którą możesz nakleić na kod, aby był „lepszy”. Z pragmą „użyj ścisłej”, przeglądarka nagle WYRZUCA wyjątki w losowych miejscach, których nigdy wcześniej nie rzucała, tylko dlatego, że w tym miejscu robisz coś, na co szczęśliwie pozwala domyślny / luźny JavaScript, ale surowa JavaScript brzydzi się! Możesz mieć naruszenia ścisłości ukryte w rzadko używanych wywołaniach w swoim kodzie, które rzucą wyjątek tylko wtedy, gdy w końcu zostaną uruchomione - powiedzmy, w środowisku produkcyjnym, z którego korzystają Twoi płacący klienci! Jeśli zamierzasz się zanurzyć, dobrym pomysłem jest zastosowanie „użyj ścisłego” wraz z kompleksowymi testami jednostkowymi i ściśle skonfigurowanym zadaniem budowania JSHint, które da ci pewność, że nie ma ciemnego zakątka twojego modułu, który wybuchnie okropnie tylko dlatego, że włączyłeś tryb ścisły. Albo, hej, oto inna opcja: po prostu nie dodawaj „użyj ścisłego” do żadnego z dotychczasowego kodu, prawdopodobnie jest to bezpieczniejsze, szczerze. OSTATECZNIE NIE dodawaj „użyj ścisłego” do modułów, których nie jesteś właścicielem lubutrzymywać, podobnie jak moduły stron trzecich. Myślę, że nawet jeśli jest to śmiertelnie niebezpieczne zwierzę w klatce, „surowe” może być dobre, ale trzeba to zrobić dobrze. Najlepszym momentem na rygorystyczne jest rozpoczęcie projektu od zera. Skonfiguruj JSHint / JSLint z wszystkimi ostrzeżeniami i opcjami tak napiętymi, jak twój zespół może znieść, uzyskaj dobry system kompilacji / testowania / potwierdzania du jour, skonfigurowany jak Grunt + Karma + Chai, i dopiero wtedy zacznij oznaczać wszystkie swoje nowe moduły jako „ użyj ścisłego ”. Przygotuj się na wiele skąpych błędów i ostrzeżeń. Upewnij się, że wszyscy rozumieją wagę, konfigurując kompilację na FAIL, jeśli JSHint / JSLint powoduje jakiekolwiek naruszenia. Mój projekt nie był projektem od podstaw, kiedy przyjąłem „użyj ścisłego”. W rezultacie moje IDE jest pełne czerwonych znaków, ponieważ w połowie moich modułów nie używam „ścisłego”, co JSHint narzeka. To dla mnie przypomnienie, jakie refaktoryzacje powinienem zrobić w przyszłości. Moim celem jest uwolnienie się od czerwonych znaków z powodu wszystkich moich brakujących stwierdzeń „używaj ścisłych”, ale to już lata. | Używanie „użyj ścisłego”; nie poprawia nagle twojego kodu. Tryb ścisły JavaScript jest funkcją w ECMAScript 5. Tryb ścisły można włączyć, deklarując go w górnej części skryptu / funkcji. „użyj ścisłego”; Gdy silnik JavaScript zobaczy tę dyrektywę, zacznie interpretować kod w specjalnym trybie. W tym trybie błędy są generowane po wykryciu pewnych praktyk kodowania, które mogą być potencjalnymi błędami (co jest przyczyną trybu ścisłego). Rozważmy ten przykład: var a = 365; var b = 030; W swojej obsesji wyrównywania literałów numerycznych, programista nieumyślnie zainicjował zmienną b literałem ósemkowym. Tryb nieścisły zinterpretuje to jako literał numeryczny o wartości 24 (o podstawie 10). Jednak tryb ścisły spowoduje zgłoszenie błędu. Aby zapoznać się z niepełną listą specjalności w trybie ścisłym, zobacz tę odpowiedź. Gdzie powinienem używać słowa „użyj ścisłego” ;? W mojej nowej aplikacji JavaScript: Absolutnie! Tryb ścisły może być używany jako sygnalizator, gdy robisz coś głupiego ze swoim kodem. W moim istniejącym kodzie JavaScript: Prawdopodobnie nie! Jeśli istniejący kod JavaScript zawiera instrukcje, które są zabronione w trybie ścisłym, aplikacja po prostu się zepsuje. Jeśli potrzebujesz trybu ścisłego, powinieneś być przygotowany do debugowania i poprawiania istniejącego kodu. Dlatego właśnie przy użyciu „użyj ścisłego”; nie poprawia nagle twojego kodu. Jak korzystać z trybu ścisłego? Wstaw „użyj ścisłego”; oświadczenie w górnej części skryptu: // Plik: myscript.js „użyj ścisłego”; var a = 2; .... Zauważ, że wszystko w pliku myscript.js zostanie zinterpretowane w trybie ścisłym. Lub wstaw „użyj ścisłego”; instrukcja u góry treści funkcji: function doSomething () { „użyj ścisłego”; ... } Wszystko w zakresie leksykalnym funkcji doSomething będzie interpretowane w trybie ścisłym. Ważne jest tutaj słowo zakres leksykalny. Na przykład, jeśli twój ścisły kod wywołuje funkcję biblioteki, która nie jest ścisła, tylko twój kod jest wykonywany w trybie ścisłym, a nie wywoływana funkcja. Zobacz tę odpowiedź, aby uzyskać lepsze wyjaśnienie. Jakie rzeczy są zabronione w trybie ścisłym? Znalazłem fajny artykuł opisujący kilka rzeczy, które są zabronione w trybie ścisłym (pamiętaj, że nie jest to lista ekskluzywna): Zakres W przeszłości JavaScript był mylony co do tego, jak działa są ograniczone. Czasami wydają się mieć zasięg statyczny, ale niektóre funkcje sprawiają, że zachowują się tak, jakby były objęte zakresem dynamicznym. To jest mylące, utrudniające czytanie i zrozumienie programów. Nieporozumienie powoduje błędy. Jest to również problem z wydajnością. Statyczne określanie zakresu pozwoliłoby na wiązanie zmiennych podczas kompilacji czas, ale wymóg dotyczący zakresu dynamicznego oznacza, że powiązanie musi być odroczony do środowiska uruchomieniowego, który zapewnia znaczną wydajność rzut karny. Tryb ścisły wymaga, aby wszystkie powiązania zmiennych były wykonywane statycznie. Oznacza to, że funkcje, które wcześniej wymagały dynamicznego wiązania należy wyeliminować lub zmodyfikować. W szczególności oświadczenie with jest wyeliminowane, a zdolność funkcji eval do manipulowania przy otoczenie osoby dzwoniącej jest poważnie ograniczone. Jedną z zalet ścisłego kodu jest to, że narzędzia takie jak YUI Compressor może wykonywać lepszą pracę podczas przetwarzania. Impled Global Variables JavaScript zawiera zmienne globalne. Jeśli nie deklarujesz jawnie zmiennej, jest to zmienna globalna w sposób dorozumiany zadeklarowany za Ciebie. Ułatwia to programowanie początkujących, ponieważ mogą zaniedbać niektóre podstawowe czynności domowe posługi. Ale sprawia, że zarządzanie większymi programami znacznie bardziej trudne i znacznie pogarsza niezawodność. Więc ściśle mode, domniemane zmienne globalne nie są już tworzone. Powinieneś jawnie zadeklaruj wszystkie swoje zmienne. Globalny wyciek Istnieje wiele sytuacji, które mogą to spowodować być związanym z obiektem globalnym. Na przykład, jeśli zapomnisz podaj nowy prefiks podczas wywoływania konstruktorafunkcja konstruktor this zostanie nieoczekiwanie powiązany z obiektem globalnym, więc zamiast inicjalizować nowy obiekt, będzie on działał po cichu manipulowanie przy zmiennych globalnych. W takich sytuacjach tryb ścisły będzie zamiast tego powiąż to z undefined, co spowoduje, że konstruktor zamiast tego zgłoś wyjątek, pozwalając na znaczne wykrycie błędu wcześniej. Hałaśliwa awaria JavaScript zawsze miał właściwości tylko do odczytu, ale Ty nie mógł ich stworzyć samodzielnie, dopóki nie pojawi się Object.createProperty w ES5 funkcja ujawniła tę możliwość. Jeśli próbowałeś przypisać wartość do właściwości tylko do odczytu, po cichu zawiedzie. Przypisanie tak nie zmienia wartości właściwości, ale program będzie działał jak chociaż miał. Jest to zagrożenie integralności, które może powodować programy wejść w stan niespójny. W trybie ścisłym próbujesz zmienić plik właściwość tylko do odczytu zgłosi wyjątek. Ósemkowe Ósemkowa (lub podstawa 8) reprezentacja liczb była niezwykle przydatne podczas programowania na poziomie maszyny na maszynach, których słowo rozmiary były wielokrotnością 3. Do pracy z CDC potrzebny był ósemkowy 6600 mainframe, który miał rozmiar słowa 60 bitów. Gdybyś mógł czytać ósemkowo, możesz spojrzeć na słowo jako 20 cyfr. Przedstawione dwie cyfry kod operacyjny, a jedna cyfra oznacza jeden z 8 rejestrów. Podczas było to powolne przejście od kodów maszynowych do języków wysokiego poziomu Uważa się, że przydatne jest zapewnienie form ósemkowych w językach programowania. W C występowała wyjątkowo niefortunna reprezentacja ósemkowatości zaznaczone: wiodące zero. Więc w C, 0100 oznacza 64, a nie 100, a 08 to błąd, nie 8. Jeszcze bardziej, niestety, ten anachronizm był skopiowane do prawie wszystkich współczesnych języków, w tym JavaScript, gdzie służy tylko do tworzenia błędów. Nie ma innego celu. Więc w tryb ścisły, formy ósemkowe nie są już dozwolone. I tak dalej Pseudo tablica argumentów staje się nieco większa tablicowo w ES5. W trybie ścisłym traci wywoływanego i dzwoniącego nieruchomości. Dzięki temu możesz przekazać swoje argumenty niezaufanym kod bez utraty poufnego kontekstu. Ponadto właściwość arguments funkcji jest wyeliminowana. W trybie ścisłym zduplikowane klucze w literale funkcyjnym dadzą znak błąd składni. Funkcja nie może mieć dwóch parametrów o tej samej nazwie. Funkcja nie może mieć zmiennej o takiej samej nazwie jak jedna z jej nazw parametry. Funkcja nie może usuwać własnych zmiennych. Próba usuwanie właściwości, których nie można konfigurować, zgłasza teraz wyjątek. Prymitywny wartości nie są niejawnie opakowane. Zarezerwowane słowa dla przyszłych wersji JavaScript ECMAScript 5 dodaje listę słów zastrzeżonych. Jeśli użyjesz ich jako zmiennych lub argumentów, tryb ścisły zwróci błąd. Słowa zastrzeżone to: implementuje, interfejs, let, pakiet, prywatny, chroniony, publiczny, statyczny i zysk Dalsze czytanie Tryb ścisły - JavaScript | MDN Obsługa przeglądarki w trybie ścisłym Przejście do trybu ścisłego | Zdecydowanie zalecam każdemu deweloperowi rozpoczęcie teraz korzystania z trybu ścisłego. Jest wystarczająco dużo przeglądarek, które go obsługują, więc tryb ścisły w uzasadniony sposób pomoże nam uchronić nas przed błędami, o których nawet nie wiedzieliśmy, że znajdują się w kodzie. Najwyraźniej na początkowym etapie pojawią się błędy, z którymi nigdy wcześniej nie spotkaliśmy się. Aby uzyskać pełne korzyści, po przejściu do trybu ścisłego musimy przeprowadzić odpowiednie testy, aby upewnić się, że wszystko złapaliśmy. Zdecydowanie nie wrzucamy do naszego kodu po prostu userict i nie zakładamy, że nie ma błędów. Problem polega na tym, że nadszedł czas, aby zacząć używać tej niezwykle przydatnej funkcji językowej do pisania lepszego kodu. Na przykład, var person = { nazwa: 'xyz', pozycja: „abc”, fullname: function () {"use ścisłe"; return this.name; } }; JSLint to debugger napisany przez Douglasa Crockforda. Po prostu wklej skrypt, a on szybko przeskanuje w poszukiwaniu zauważalnych problemów i błędów w kodzie. | Chciałbym udzielić nieco bardziej uzasadnionej odpowiedzi, uzupełniającej inne odpowiedzi. Miałem nadzieję edytować najpopularniejszą odpowiedź, ale nie udało mi się. Starałem się, aby był jak najbardziej wyczerpujący i kompletny. Więcej informacji można znaleźć w dokumentacji MDN. „użyj ścisłej” dyrektywy wprowadzonej w ECMAScript 5. Dyrektywy są podobne do oświadczeń, ale różnią się. userict nie zawiera słów kluczowych: Dyrektywa jest prostym wyrażeniem, które składa się ze specjalnego literału ciągu (w pojedynczych lub podwójnych cudzysłowach). Silniki JavaScript, które nie implementują ECMAScript 5, widzą jedynie wyrażenie wyrażenia bez skutków ubocznych. Oczekuje się, że przyszłe wersje standardów ECMAScript wprowadzą użycie jako prawdziwego słowa kluczowego; cytaty staną się w ten sposób nieaktualne. use ścisłe może być używane tylko na początku skryptu lub funkcji, tj. musi poprzedzać każdą inną (rzeczywistą) instrukcję. Nie musi to być pierwsza instrukcja w skrypcie funkcji: może być poprzedzona innymi wyrażeniami instrukcji, które składają się z literałów łańcuchowych (i JavaScriptimplementacje mogą traktować je jako dyrektywy specyficzne dla implementacji). Instrukcje literałów łańcuchowych, które następują po pierwszej rzeczywistej instrukcji (w skrypcie lub funkcji) to proste instrukcje wyrażenia. Tłumaczom nie wolno interpretować ich jako dyrektyw i nie mają one żadnego skutku. Dyrektywa use strict wskazuje, że następujący kod (w skrypcie lub funkcji) jest kodem ścisłym. Kod na najwyższym poziomie skryptu (kod, którego nie ma w funkcji) jest uważany za kod ścisły, gdy skrypt zawiera dyrektywę use strict. Zawartość funkcji jest uważana za ścisły kod, gdy sama funkcja jest zdefiniowana w ścisłym kodzie lub gdy funkcja zawiera dyrektywę use strict. Kod przekazany do metody eval () jest uważany za kod ścisły, gdy funkcja eval () została wywołana z kodu ścisłego lub zawiera samą dyrektywę use strict. Tryb ścisły ECMAScript 5 to ograniczony podzbiór języka JavaScript, który eliminuje istotne wady języka i oferuje bardziej rygorystyczne sprawdzanie błędów i większe bezpieczeństwo. Poniżej wymieniono różnice między trybem ścisłym a trybem normalnym (z których pierwsze trzy są szczególnie ważne): Nie można używać instrukcji with w trybie ścisłym. W trybie ścisłym wszystkie zmienne muszą być zadeklarowane: jeśli przypiszesz wartość do identyfikatora, który nie został zadeklarowany jako zmienna, funkcja, parametr funkcji, parametr klauzuli catch lub właściwość obiektu globalnego, otrzymasz ReferenceError. W trybie normalnym identyfikator jest niejawnie deklarowany jako zmienna globalna (jako właściwość obiektu globalnego) W trybie ścisłym słowo kluczowe this ma wartość undefined w funkcjach, które zostały wywołane jako funkcje (nie jako metody). (W trybie normalnym zawsze wskazuje na obiekt globalny). Tej różnicy można użyć do sprawdzenia, czy implementacja obsługuje tryb ścisły: var hasStrictMode = (function () {"use strict"; return this === undefined} ()); Również gdy funkcja jest wywoływana za pomocą call () lub stosowana w trybie ścisłym, to jest to dokładnie wartość pierwszego argumentu wywołania call () lub apply (). (W trybie normalnym wartości null i undefined są zastępowane przez obiekt globalny, a wartości, które nie są obiektami, są rzutowane na obiekty). W trybie ścisłym otrzymasz TypeError, gdy spróbujesz przypisać właściwości tylko do odczytu lub zdefiniować nowe właściwości dla obiektu, który nie jest rozszerzalny. (W trybie normalnym oba po prostu zawodzą bez komunikatu o błędzie). W trybie ścisłym, przekazując kod do eval (), nie można deklarować ani definiować zmiennych lub funkcji w zakresie wywołującego (jak można to zrobić w trybie normalnym). Zamiast tego tworzony jest nowy zakres dla funkcji eval (), w którym znajdują się zmienne i funkcje. Ten zakres jest niszczony po zakończeniu wykonywania funkcji eval (). W trybie ścisłym obiekt-argumentów funkcji zawiera statyczną kopię wartości, które są przekazywane do tej funkcji. W trybie normalnym obiekt-arguments zachowuje się w pewien sposób „magicznie”: elementy tablicy i nazwane parametry funkcji odnoszą się zarówno do tej samej wartości. W trybie ścisłym otrzymasz SyntaxError, gdy po operatorze delete występuje niekwalifikowany identyfikator (zmienna, funkcja lub parametr funkcji). W trybie normalnym wyrażenie delete nic by nie zrobiło i jest oceniane jako false. W trybie ścisłym otrzymasz TypeError, gdy spróbujesz usunąć nie konfigurowalną właściwość. (W trybie normalnym próba po prostu kończy się niepowodzeniem, a wyrażenie usuwania jest oceniane jako fałszywe). W trybie ścisłym, próba zdefiniowania kilku właściwości o tej samej nazwie dla literału obiektu jest uważana za błąd składniowy. (W trybie normalnym nie ma błędu.) W trybie ścisłym uważany jest za błąd składniowy, gdy deklaracja funkcji ma wiele parametrów o tej samej nazwie. (W trybie normalnym nie ma błędu.) W trybie ścisłym literały ósemkowe nie są dozwolone (są to literały zaczynające się od 0x (w trybie normalnym niektóre implementacje dopuszczają literały ósemkowe). W trybie ścisłym identyfikatory eval i argumenty są traktowane jak słowa kluczowe. Nie możesz zmienić ich wartości, nie możesz przypisać im wartości i nie możesz ich używać jako nazw zmiennych, funkcji, parametrów funkcji lub identyfikatorów bloku catch. W trybie ścisłym istnieje więcej ograniczeń dotyczących możliwości badania stosu wywołań. arguments.caller i arguments.callee powodują błąd TypeError w funkcji w trybie ścisłym. Ponadto niektóre właściwości obiektu wywołującego i argumenty funkcji w trybie ścisłym powodują błąd TypeError podczas próby ich odczytania. | Moje dwa centy: Jednym z celów trybu ścisłego jest umożliwienie szybszego debugowania problemów. Pomaga programistom, rzucając wyjątek, gdy wystąpią pewne złe rzeczy, które mogą spowodować ciche i dziwne zachowanie Twojej strony internetowej. W momencie, gdy użyjemy ścisłego, kod wyrzuci błędy, które pomogą programistom naprawić je z wyprzedzeniem. Kilka ważnych rzeczy, których nauczyłem się po użyciu use strict: Zapobiega globalnej deklaracji zmiennych: var tree1Data= {nazwa: „Drzewo bananowe”, wiek: 100, liczba liści: 100000}; drzewo funkcji (typeOfTree) { różny wiek; var leafCount; age = typeOfTree.age; leafCount = typeOfTree.leafCount; nameoftree = typeOfTree.name; }; var drzewo1 = nowe drzewo (drzewo1Data); console.log (okno); Teraz ten kod tworzy nameoftree w zakresie globalnym, do którego można uzyskać dostęp za pomocą window.nameoftree. Gdy zaimplementujemy metodę use strict, kod wygeneruje błąd. Uncaught ReferenceError: nameoftree nie jest zdefiniowana Próba Eliminuje stwierdzeniem: z instrukcjami nie można zminimalizować za pomocą narzędzi takich jak uglify-js. Są również przestarzałe i usuwane z przyszłych wersji JavaScript. Próba Zapobiega duplikatom: Gdy mamy zduplikowaną właściwość, zgłasza wyjątek Uncaught SyntaxError: Zduplikowana właściwość danych w literale obiektu not dozwolone w trybie ścisłym "użyj ścisłego"; var tree1Data = { nazwa: 'Banana Tree', wiek: 100, leafCount: 100000, nazwa: 'Drzewo bananowe' }; Jest jeszcze kilka, ale muszę zdobyć więcej wiedzy na ten temat. | Jeśli używasz przeglądarki wydanej w zeszłym roku, najprawdopodobniej obsługuje ona tryb ścisły JavaScript. Tylko starsze przeglądarki, zanim ECMAScript 5 stał się obecnym standardem, nie obsługują go. Cudzysłowy wokół polecenia zapewniają, że kod będzie nadal działał również w starszych przeglądarkach (chociaż rzeczy, które generują błąd składni w trybie ścisłym, zwykle powodują nieprawidłowe działanie skryptu w trudny do wykrycia sposób w starszych przeglądarkach). | Podczas dodawania „use strict”; następujące przypadki spowodują zgłoszenie błędu SyntaxError przed wykonaniem skryptu: Torując drogę przyszłym wersjom ECMAScript, używając jednego z nowo zarezerwowanych słów kluczowych (przed ECMAScript 6): implements, interface, let, package, private, protected, public, static, and yield. Deklarowanie funkcji w blokach if (a : 3: 15) pod adresem: 6: 5 Tutaj kompilator zgłasza błąd odwołania. W trybie ścisłym kompilator nie pozwala nam używać zmiennej bez jej zadeklarowania. Dzięki temu można zapobiec wyciekom pamięci. Dodatkowo możemy napisać bardziej zoptymalizowany kod. | Tryb ścisły eliminuje błędy, które byłyby ignorowane w trybie nieścisłym, dzięki czemu javascript jest „bardziej bezpieczny”. Czy jest zaliczany do najlepszych praktyk? Tak, włączenie trybu ścisłego jest uważane za część najlepszych praktyk podczas pracy z JavaScriptem. Odbywa się to poprzez dodanie poniższej linii kodu w pliku JS. „użyj ścisłego”; w swoim kodzie. Co to oznacza dla klientów użytkownika? Wskazanie, że kod powinien być interpretowany w trybie ścisłym, oznacza dla klientów użytkownika, takich jak przeglądarki, że powinni traktować kod dosłownie jako napisany i zgłaszać błąd, jeśli kod nie ma sensu. Na przykład: Załóżmy, że w swoim pliku .js masz następujący kod: Scenariusz 1: [NO STRICT MODE] var city = „Chicago” console.log (miasto) // Wyświetla nazwę miasta, np. Chicago Scenariusz 2: [NO STRICT MODE] city = „Chicago” console.log (miasto) // Wyświetla nazwę miasta, np. Chicago Dlaczego więc nazwa zmiennej jest drukowana w obu przypadkach? Bez włączonego trybu ścisłego programy klienckie często przechodzą serię modyfikacji w problematycznym kodzie, próbując nadać mu sens. Na pierwszy rzut oka może się to wydawać dobrą rzeczą i rzeczywiście, praca poza trybem ścisłym umożliwia ludziom zmoczenie nóg kodem JavaScript bez dokładnego ustalenia wszystkich szczegółów. Jednak jako programista nie chcę zostawić błędu w swoim kodzie, ponieważ wiem, że może on wrócić i ugryźć mnie później, a także chcę po prostu napisać dobry kod. I tu właśnie pomaga tryb ścisły. Scenariusz 3: [STRICT MODE] „użyj ścisłego”; city = „Chicago” console.log (miasto) // Błąd odniesienia: przypisanie to niezadeklarowane zmienne miasto. Dodatkowa wskazówka: aby zachować jakość kodu w trybie ścisłym, nie musisz pisać tego wielokrotnie, zwłaszcza jeśli masz wiele plików .js. Możesz wymusić tę regułę globalnie w regułach eslint w następujący sposób: Nazwa pliku: .eslintrc.js module.exports = { env: { es6: prawda }, rules: { ścisłe: [„błąd”, „globalny”], }, }; OK, więc czemu zapobiega się w trybie ścisłym? Użycie zmiennej bez zadeklarowania spowoduje zgłoszenie błędu w trybie ścisłym. Ma to zapobiec niezamierzonemu tworzeniu zmiennych globalnych w całej aplikacji. Przykład z drukowaniem Chicago obejmuje to w szczególności. Usunięcie zmiennej, funkcji lub argumentu jest nie-nie w trybie ścisłym. "użyj ścisłego"; funkcja x (p1, p2) {}; usuń x; // Spowoduje to błąd Kopiowanie nazwy parametru jest niedozwolone w trybie ścisłym. "użyj ścisłego"; funkcja x (p1, p1) {}; // Spowoduje to błąd Zarezerwowane słowa w języku JavaScript nie są dozwolone w trybie ścisłym. Słowa to implementuje interfejs, let, pakiety, prywatne, chronione, publiczne. statyczne i plastyczne Pełniejszą listę znajdziesz w dokumentacji MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode | Bardzo aktywne pytanie. Zdobądź 10 punktów reputacji, aby odpowiedzieć na to pytanie. Wymóg dotyczący reputacji pomaga chronić to pytanie przed spamem i brakiem odpowiedzi. Nie szukasz odpowiedzi? Przeglądaj inne pytania otagowane składnia javascript jslint use-strict lub zadaj własne pytanie.